package vip.xiaonuo.common.util;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @author zjt
 * @description
 * @date 2025/4/7 15:58
 */
public class CommonRandomUtil {

    /**
     * 生成指定范围内的随机整数（包含边界值）
     *
     * @param min 最小值（包含）
     * @param max 最大值（包含）
     * @return 随机整数
     */
    public static int generateRandomNumber(int min, int max) {
        if (min > max) {
            throw new IllegalArgumentException("最小值不能大于最大值");
        }
        return ThreadLocalRandom.current().nextInt(min, max + 1);
    }

    /**
     * 生成随机字符串
     *
     * @param length     字符串长度
     * @param useDigits  是否包含数字
     * @param useLower   是否包含小写字母
     * @param useUpper   是否包含大写字母
     * @param useSpecial 是否包含特殊符号
     * @return 随机字符串
     */
    public static String generateRandomString(int length,
                                              boolean useDigits,
                                              boolean useLower,
                                              boolean useUpper,
                                              boolean useSpecial) {
        // 定义字符池
        StringBuilder charPool = new StringBuilder();
        if (useDigits) charPool.append("0123456789");
        if (useLower) charPool.append("abcdefghijklmnopqrstuvwxyz");
        if (useUpper) charPool.append("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
        if (useSpecial) charPool.append("!@#$%^&*()_+-=[]{}|;:'\",.<>/?");

        if (charPool.length() == 0) {
            throw new IllegalArgumentException("至少需要启用一种字符类型");
        }
        if (length < 1) {
            throw new IllegalArgumentException("字符串长度必须大于0");
        }
        // 生成随机字符串
        Random random = new Random();
        StringBuilder result = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            int randomIndex = random.nextInt(charPool.length());
            result.append(charPool.charAt(randomIndex));
        }
        return result.toString();
    }
}
